#ifndef CVECT2D_H
#define CVECT2D_H

/*
 * CVect2d.h
 * Klasė darbui su dvimačiais vektoriais
 *
 *
 */

class CVect2d
{
private:
    double x, y;  // X ir Y koordinatės

public:
	
    CVect2d();		// konstruktorius tuščias, pradinės reikšmės nepriskiriamos
    CVect2d( double x, double y );
    CVect2d( const CVect2d &v );
    ~CVect2d();		// Destruktorius, tuščias

    void set( const double &x, const double &y );	// Įrašo kintamųjų reikšmes
    void setX( const double &x );
    void setY( const double &y );

    void get( double &x, double &y ) const; 			// Grąžina kintamųjų reikšmes
    double getX() const;
    double getY() const;

    double lenght() const;    // Gražina vektoriaus ilgį
    void normalize();		// Normalizuoja vektorių
    CVect2d direction() const; //  gražina normalizuotą vektorių

    void Add( const CVect2d &v );			// Operacijos pakeičiant vektorių
    void Substract( const CVect2d &v );
    void Multiply( const double &m );
    void Substract( const double &m );

    void operator += ( const CVect2d &v );  // Operatorių operacijos pakeičiančios vektorių
    void operator -= ( const CVect2d &v );
    void operator *= ( const double &m );
    void operator /= ( const double &m );


    CVect2d operator + ( const CVect2d &v ) const;	// Operacijos grąžinančios rezultatą
    CVect2d operator - ( const CVect2d &v ) const;
    CVect2d operator * ( const double &m ) const;
    CVect2d operator / ( const double &m ) const;
    double operator * ( const CVect2d &v ) const;	// Skaliarinė vektorių sandauga
    CVect2d projectionTo( const CVect2d &v ) const;     // vektoriaus projekcija į vektorių v
    CVect2d leftNormal() const;                         // Kairysis statmuo
    CVect2d rightNormal() const;                        // Dešinysis statmuo

    bool operator > ( const double &len ) const;	// Palyginimo operacijos
    bool operator >= ( const double &len ) const;
    bool operator < ( const double &len ) const;
    bool operator <= ( const double &len ) const;

    static double dotProduct( const CVect2d &a, const CVect2d &b)   // Skaliarinė vektorių sadauga
    {
        return a.getX()*b.getX() + a.getY()*b.getY();
    }
	
};

#endif // CVECT2D_H
